//自己
class Solution {
public:
    vector<int> twoSum(vector<int>& price, int target)  //target目标
    { 
        int left=0, right=price.size()-1;
        while (left < right)
        {
            if (price[left] + price[right] > target)
                --right;
            else if (price[left] + price[right] < target)
                ++left;
            else //==
                break; //这里返回逻辑上不太好(left >= right 或 else 结束循环后都返回了{price[left], price[right]}), 虽然实际运行没有问题
        }
        return {price[left], price[right]};//隐式类型转换 + 构造(被优化了, == 构造 + 返回时拷贝构造) (多元素的, 调用initialize的构造) 
        //vector<int>({price[left], price[right]})//隐式类型转换 + 匿名构造 + 返回时拷贝构造
    }
};

//答案
class Solution {
public:
    vector<int> twoSum(vector<int>& price, int target)  //target目标
    { 
        int left=0, right=price.size()-1;
        while (left < right)
        {   
            int sum = price[left] + price[right];
            if (sum > target)
                --right;
            else if (sum < target)
                ++left;
            else //==
                return {price[left], price[right]};//隐式类型转换 + 构造(被优化了, == 构造 + 返回时拷贝构造) (多元素的, 调用initialize的构造) 
                //vector<int>({price[left], price[right]})//隐式类型转换 + 匿名构造 + 返回时拷贝构造
        }

        //为了满足编译器所有路径都必须要有返回值的要求
        return {-1, -1};//随便返回一个值
    }
};
//时间O(n)
//空间O(1)